/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.rrhh.managed;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.reporte.bean.Reporte;
import sv.com.intesal.reporte.bean.TipoReporte;
import sv.com.intesal.reporte.controlador.GenerarReporte;
import sv.com.intesal.rrhh.bean.Cargo;
import sv.com.intesal.rrhh.bean.Empleado;
import sv.com.intesal.rrhh.controlador.CargoControlador;
import sv.com.intesal.rrhh.controlador.EmpleadoControlador;

import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author JM
 */
@ManagedBean(name = "empleadoManaged")
@ViewScoped
public class EmpleadoManaged implements Serializable {

    private Empleado selectedEmpleado;
    private List<Empleado> empleados;
    private List<Cargo> cargos;
    private SessionManaged sm;
    private Mensaje m;

    public EmpleadoManaged() {
        selectedEmpleado = new Empleado();
        sm = new SessionManaged();
        m = new Mensaje();
        this.llenarCargo();
    }

    public void fillGrid() {
        try {
            if (sm.validar_rol_usuario("wfrmEmpleado", sm.buscar) == true) {
                if (empleados == null) {
                    EmpleadoControlador ec = new EmpleadoControlador();
                    empleados = ec.fillGrid();
                }
            }
        } catch (Exception e) {
            m.message(m.getIerror());
            e.printStackTrace();
        }
    }

    private void llenarCargo() {
        try {
            if (cargos == null) {
                CargoControlador cc = new CargoControlador();
                cargos = cc.fillCombo();
            }
        } catch (Exception e) {
            m.message(m.getIerror());
            e.printStackTrace();
        }
    }

    public void EmpleadoMantenimiento() {
        try {
            if (this.validar() == true) {
                if (this.selectedEmpleado.getId_e() == null) {
                    if (sm.validar_rol_usuario("wfrmEmpleado", sm.agregar) == true) {
                        EmpleadoControlador em = new EmpleadoControlador();
                        em.mantEmpleado(this.selectedEmpleado);
                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmEmpleado", sm.modificar) == true) {
                        EmpleadoControlador em = new EmpleadoControlador();
                        em.mantEmpleado(this.selectedEmpleado);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private Boolean validar() throws Exception {
        try {
            Boolean var_return = true;
            if (this.selectedEmpleado.getIndentifacador_em().equals("")) {
                m.messageAdvertencia(m.campoError("IDENTIFICADOR"));
                var_return = false;
            }
            if (this.selectedEmpleado.getNombre_em().equals("")) {
                m.messageAdvertencia(m.campoError("NOMBRE"));
                var_return = false;
            }
            if (this.selectedEmpleado.getApellido_em().equals("")) {
                m.messageAdvertencia(m.campoError("APELLIDO"));
                var_return = false;
            }
            if (this.selectedEmpleado.getNit_em().equals("")) {
                m.messageAdvertencia(m.campoError("NIT"));
                var_return = false;
            }
            if (this.selectedEmpleado.getTelefono_em().equals("")) {
                m.messageAdvertencia(m.campoError("TELEFONO"));
                var_return = false;
            }
            if (this.selectedEmpleado.getDui_em().equals("")) {
                m.messageAdvertencia(m.campoError("DUI"));
                var_return = false;
            }
            if (this.selectedEmpleado.getDireccion_em().equals("")) {
                m.messageAdvertencia(m.campoError("DIRECCIÓN"));
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void EmpleoGenerarReporte() {
        try {
            Map reportParams = new HashMap();
//            reportParams.put("Condicion", "su.id_su = m.id_su and m.id_m = ms.id_m and su.id_su=2");
            reportParams.put("CompleteQuery", " SELECT sum(ms.cantidad_ms) AS material_sucursal_cantidad_ms, su.nombre_su AS sub_categoria_nombre_su, m.codigo_barra_m AS material_codigo_barra_m, m.nombre_m AS material_nombre_m FROM      sub_categoria su , material m , material_sucursal ms where su.id_su = m.id_su and m.id_m = ms.id_m and su.id_su=2 Group by su.nombre_su, m.codigo_barra_m, m.nombre_m ");

            GenerarReporte gr = new GenerarReporte();
            Reporte r = new Reporte();

            gr.setFormatoReporte("xlsx");
            gr.setDirectorioReporte("/reportes/rptConteoProductosSQL.jasper");
            gr.setNombreDocumento("Conteo de Productos");

            r.getTipoReporte().setExtension_tr("xlsx");
            r.setDirectorio_r("/reportes/rptConteoProductosSQL.jasper");
            r.setNombre_r("Conteo de Productos");

            gr.generateReport(reportParams, r);
//String directorioReporte = "/reportes/testXML.jasper";

//            String xmlDataSourceString ="/reportes/testXMLReport.xml";
//            String xmlDataSourceString ="<Reporte><REGISTRO><nombre_s>CASA MATRIZ INTESAL</nombre_s><nombre_cat>Herramienta</nombre_cat><nombre_su>Cierra</nombre_su><nombre_m>michy</nombre_m><codigo_barra_m>CB</codigo_barra_m><cantidad_ms>31</cantidad_ms><maximo_ms>1000</maximo_ms><minimo_ms>50</minimo_ms></REGISTRO><REGISTRO><nombre_s>CASA MATRIZ INTESAL</nombre_s><nombre_cat>Material</nombre_cat><nombre_su>Cable 2</nombre_su><nombre_m>Cable optico</nombre_m><codigo_barra_m/><cantidad_ms>41</cantidad_ms><maximo_ms>400</maximo_ms><minimo_ms>34</minimo_ms></REGISTRO></Reporte>";
//            gr.generateReport(reportParams, directorioReporte, xmlDataSourceString);
        } catch (Exception e) {
            System.out.println("Error en EmpleoGenerarReporte");
            e.printStackTrace();
        }

    }

    /*SSETTERS AND GETTERS*/
    public List<Cargo> getCargos() {
        return cargos;
    }

    public void setCargos(List<Cargo> cargos) {
        this.cargos = cargos;
    }

    public List<Empleado> getEmpleados() {
        return empleados;
    }

    public void setEmpleados(List<Empleado> empleados) {
        this.empleados = empleados;
    }

    public Empleado getSelectedEmpleado() {
        if (this.selectedEmpleado == null) {
            this.selectedEmpleado = new Empleado();
        }
        return selectedEmpleado;
    }

    public void setSelectedEmpleado(Empleado selectedEmpleado) {
        this.selectedEmpleado = selectedEmpleado;
    }
}
